home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / graphics / raymovi2.arc / WNDOWS.C < prev   
C/C++ Source or Header  |  1988-12-21  |  4KB  |  149 lines

  1. /* wndows.c
  2.  *   manage the interface to GEM windows
  3.  
  4. Entry Points:
  5.     w_open(type,name)            ***
  6.     w_close()
  7.         w_lClut(new, old)
  8.  
  9. Outward Calls:
  10.     wOnewSize()
  11.  
  12.  */
  13.  
  14. #include <obdefs.h>
  15. #include <define.h>
  16. #include <gemdefs.h>
  17. #include <vdibind.h>
  18. #include <osbind.h>
  19.  
  20. #define MIN_WIDTH  (2*gl_wbox)
  21. #define MIN_HEIGHT (3*gl_hbox)
  22. int gl_hchar, gl_wchar, gl_wbox, gl_hbox;    /* system sizes */
  23.  
  24. int    ps_handle;    /* physical screen (workstation) handle */
  25. int    vs_handle;    /* virtual screen (workstation) handle */
  26. int    wi_handle;    /* window handle */
  27.  
  28. int    xdesk,ydesk,hdesk,wdesk;    /* size of whole desktop */
  29. int    xwork,ywork,hwork,wwork;    /* size of current working window */
  30. int    xold,yold,hold,wold;        /* size of screen before FULL cmd */
  31.  
  32. int    contrl[12], intin[128], ptsin[128], intout[128];
  33. int    ptsout[128];    /* storage for gem bindings */
  34.  
  35. char *p_menu;
  36. int WiKind;
  37.  
  38. w_open(kind, name, menue_id)
  39. int kind;        /* properties of window (e.g. MOVER|CLOSER|...) */
  40. char *name;
  41. int menue_id;        /* open menue? */
  42. {    char n2[30];
  43.     appl_init();
  44.     open_vwork();
  45.      open_window(kind, name);
  46.     WiKind = kind;
  47.     sprintf(n2, "%s.rsc", name);
  48.     open_rsc(n2, menue_id);
  49.     graf_mouse(ARROW,0x0L);
  50.     return (wi_handle);
  51. }
  52.  
  53. w_close()
  54. {    if (p_menu)
  55.         menu_bar(p_menu, FALSE);
  56.     wind_close(wi_handle);
  57.     graf_shrinkbox(xwork+wwork/2,ywork+hwork/2,gl_wbox,gl_hbox,xwork,ywork,wwork,hwork);
  58.     wind_delete(wi_handle);
  59.     v_clsvwk(vs_handle);
  60.     appl_exit();
  61. }
  62.  
  63. int work_in[11];    /* Input to GSX parameter array */
  64. int work_out[57];    /* Output from GSX parameter array */
  65.  
  66. open_vwork()
  67. {    int i;
  68.  
  69.     ps_handle=graf_handle(&gl_wchar,&gl_hchar,&gl_wbox,&gl_hbox);
  70.     for(i=0;i<10;work_in[i++]=1);
  71.     work_in[10]=2;
  72.     vs_handle=ps_handle;
  73.     v_opnvwk(work_in,&vs_handle,work_out);
  74.     if (vs_handle == 0)
  75.         panic("v_opnvwk couldn't open window",0L,0L);
  76. }
  77.  
  78. open_window(kind, name)
  79. int kind;
  80. char *name;
  81. {    wind_get(0/*whole screen*/,WF_WORKXYWH, &xdesk, &ydesk, &wdesk, &hdesk);
  82.     wi_handle=wind_create(kind,xdesk,ydesk,wdesk,hdesk);
  83.  
  84.     wind_set(wi_handle, WF_NAME,name, 0,0);
  85.     graf_growbox(xdesk+wdesk/2,ydesk+hdesk/2,gl_wbox,gl_hbox,xdesk,ydesk,wdesk,hdesk);
  86.     wind_open(wi_handle,xdesk,ydesk,wdesk,hdesk);
  87.     wind_get(wi_handle,WF_WORKXYWH,&xwork,&ywork,&wwork,&hwork);
  88.     wwork--;    /* ywork--;/**/ hwork--;
  89.     set_clip(xwork, ywork, wwork, hwork);
  90.     wOnewSize(xwork, ywork, wwork, hwork);
  91.     if (wdesk>500 && 2 != form_alert(1,"[3][16 Colors Required.|\
  92. Set Preferences to Low|Resolution and Restart.][okay|ignore warning]")) 
  93.         exit();/**/
  94. }
  95.  
  96. open_rsc(myname, menue)
  97. char *myname;
  98. int menue;
  99. {    if (menue)
  100.     {    if (rsrc_load(myname)==0) panic("File %s missing!",myname,0L);
  101.         if (rsrc_gaddr(R_TREE, menue, &p_menu)==0)
  102.             panic ("AES/rsrc_gaddr() error",0L,0L);
  103.         if (menu_bar(p_menu, TRUE)==0) panic ("AES/menu_bar() error",0L,0L);
  104. }    }
  105.  
  106. typedef int CLUT[16][3];
  107. CLUT (*clut_current);
  108.  
  109. w_lClut(new, old)
  110. CLUT new, old;
  111. {    int i;
  112.     clut_current = new;
  113.     for (i=0; i<16; i++)
  114.     {    if (old)
  115.             vq_color(vs_handle, i, 0, old[i]);
  116.         if (new)
  117.             vs_color(vs_handle, i, new[i]);
  118. }    }
  119.  
  120. di_header(dx, str)
  121. int dx;
  122. char *str;
  123. {    set_clip(xdesk, ydesk, wdesk, hdesk);
  124. /*    v_gtext(vs_handle, ((dx>0)? Wx0: Wx1) +dx, Wy0-3, str);/**/
  125.     v_gtext(vs_handle, xdesk + (dx<0)*wdesk + dx, ydesk-3, str);
  126.     set_clip(xwork, ywork, wwork, hwork);
  127. }
  128.  
  129. di_bg(dx, clr)
  130. int dx, clr;
  131. {    int pxy[4];
  132.     set_clip(xdesk, ydesk, wdesk, hdesk);
  133.     vsf_color(wi_handle, clr);
  134.     pxy[0] = xdesk+dx;    pxy[2] = pxy[0] + 8;
  135.     pxy[1] = ydesk-10/*3*/;    pxy[3] = pxy[1] + 18;
  136.     v_bar(wi_handle, pxy);
  137.     set_clip(xwork, ywork, wwork, hwork);
  138. }
  139. set_clip(x,y,w,h)
  140. int x,y,w,h;
  141. {    int clip[4];
  142.  
  143.     clip[0]=x;    /* set vdi's clip rectangle */
  144.     clip[1]=y;
  145.     clip[2]=x+w;
  146.     clip[3]=y+h;
  147.     vs_clip(wi_handle,1,clip);
  148. }
  149.